﻿using System.Data;
using Vallejos.Entidades.Enums;
using Vallejos.Entidades.ModeloDeDatos;

namespace Vallejos.Datos.Factory
{
    public class SolicitudFactory
    {
        public Solicitud Crear(IDataReader dr)
        {
            var tipoInstancia = (InstanciaSolicitud)dr.GetInt32(1);
            Solicitud solicitud = null;

            switch (tipoInstancia)
            {
                case InstanciaSolicitud.AnalisisCrediticio:
                    solicitud = ConstruirSolicitudDeAnalisisCrediticio(dr);
                    break;
                case InstanciaSolicitud.Prestamo:
                    solicitud = ConstruirSolicitudDePrestamo(dr);
                    break;
            }

            return solicitud;
        }

        private SolicitudDeAnalisisCrediticio ConstruirSolicitudDeAnalisisCrediticio(IDataReader dr)
        {
            return new SolicitudDeAnalisisCrediticio
            {
                Id = dr.GetInt32(0),
                Beneficiario = new Cliente { Id = dr.GetInt32(2)},
                Monto =  dr.GetDecimal(3),
                CantidadDeCuotas = dr.GetInt32(4),
                CFT = dr.GetDecimal(5),
                TNA = dr.GetDecimal(6),
                Producto = new Producto {Id = dr.GetInt32(7)},
                Estado = new EstadoDeAnalisis { idEstado = (IdEstadoAnalisis)dr.GetInt32(8) },
                InformacionDeRiesgo = dr.IsDBNull(9) ? null : new RiesgoCrediticio { Id = dr.GetInt32(9) },
                Analista = dr.IsDBNull(10) ? null : new EmpleadoBancario { Id = dr.GetInt32(10) },
                TipoFinanciacion = new TipoFinanciacion { idTipo = (IdTipoFinanciacion)dr.GetInt32(11) }
            };

        }

        private SolicitudDePrestamo ConstruirSolicitudDePrestamo(IDataReader dr)
        {
            return new SolicitudDePrestamo
            {
                Id = dr.GetInt32(0),
                Beneficiario = new Cliente { Id = dr.GetInt32(2) },
                Monto = dr.GetDecimal(3),
                CantidadDeCuotas = dr.GetInt32(4),
                CFT = dr.GetDecimal(5),
                TNA = dr.GetDecimal(6),
                Producto = new Producto { Id = dr.GetInt32(7) },
                EjecutivoEncargado = dr.IsDBNull(12) ? null : new EmpleadoBancario { Id = dr.GetInt32(12) },
                Vendedor = dr.IsDBNull(13) ? null : new EmpleadoDeConcesionaria { Id = dr.GetInt32(13) },
                Estado = new EstadoDePrestamo { idEstado = (IdEstadoPrestamo)dr.GetInt32(14) },
                Conyuge = dr.IsDBNull(15) ? null : new InformacionPersonal { Id = dr.GetInt32(15) },
                Socio = dr.IsDBNull(16) ? null : new InformacionPersonal { Id = dr.GetInt32(16) },
                Empleador = dr.IsDBNull(17) ? null : new InformacionDeEmpresa { Id = dr.GetInt32(17) },
                Servicio = dr.IsDBNull(18) ? null : new InformacionDeServicio { Id = dr.GetInt32(18) },
                Rechazo = dr.IsDBNull(19) ? null : new MotivoRezhazo { IdMotivoRechazo = (IdMotivoRechazo)dr.GetInt32(19) }
            };

        }
    }
}